home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
misc
/
math
/
gpamiga_1_38_3.lha
/
amiga
/
plotAmiga.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-11-10
|
18KB
|
853 lines
/*plot.amiga for amiga version of PARI, based on plot.sun */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* */
/* PLOT EN HAUTE RESOLUTION */
/* */
/* copyright Babe Cool */
/* */
/* */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
# include "genpari.h"
#include <exec/types.h>
#include <intuition/intuition.h>
#include <graphics/gfxmacros.h>
#include <string.h>
typedef struct spoint {
int x,y;} SPoint;
typedef struct ssegment {
int x1,y1,x2,y2;} SSegment;
typedef struct srectangle {
int x,y,width,height;} SRectangle;
long GfxBase;
#undef ISCR
#undef JSCR
#define ISCR 640 /* hires width*/
#define JSCR 400 /* hires height*/
#define DECI 50 /* 140 en haute resolution */
#define DECJ 25 /* 70 en haute resolution */
#define IDEC 5
#define JDEC 10
GEN ploth(entree *ep,GEN a,GEN b,char *ch, long prec)
{
struct IntuiMessage *msg;
struct TextAttr myfont =
{
(STRPTR)"topaz.font", 8 , 0 , 0
};
struct NewScreen myscreen1 =
{
0, 0,
650, 420,
2,
1,2,
HIRES | LACE,
CUSTOMSCREEN,
NULL,/*(struct TextAttr *)&myfont,*/
(UBYTE *)"ploth",
NULL,
NULL
};
struct NewWindow myWindow =
{
0,
5,
640,410,
-1,
-1,
CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
NULL,
NULL,
(UBYTE *)"PLOTH",
NULL,
NULL,
10, 10,
640, 400,
CUSTOMSCREEN
};
long av,av2,j,j1,i,sig,is,is2,js,js2;
GEN p1,p2,p3,p4,ysml,ybig,x,diff,dyj,dx,y[ISCR+1];
short h, iz=0, jz = 0, ordonnee[ISCR+1];
char c1[20], c2[20], c3[20], c4[20];
struct Screen *s, *OpenScreen();
struct Window *w, *OpenWindow();
struct RastPort *rp;
GfxBase=OpenLibrary("graphics.library",0);
if(!GfxBase )
{ printf("can not open graphics.library\n");
return(gnil);
}
is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
sig=gcmp(b,a); if(!sig) return gnil;
av=avma;
if(sig<0) {x=a;a=b;b=x;}
for(i=1;i<=is2;i++) y[i]=cgetr(3);
newvalue(ep,cgetr(prec)); x=(GEN)ep->value;
/*printf("gaffect 1\n");*/
gaffect(a,x);
dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
av2=avma;
for(i=1;i<=is2;i++)
{
/*printf("gaffect %d\n",i);*/
gaffect(lisexpr(ch),y[i]);
if(gcmp(y[i],ysml)<0) ysml=y[i];
if(gcmp(y[i],ybig)>0) ybig=y[i];
gaddz(x,dx,x);avma=av2;
}
diff=gsub(ybig,ysml);
if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
dyj=gdivsg(js2-1,diff);av2=avma;
for(i = 1; i <= is2; i++)
{
ordonnee[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
avma=av2;
}
if(gsigne(ybig)*gsigne(ysml)<0) jz=
DECJ + itos(ground(gmul(ybig,dyj)));
if(gsigne(a)*gsigne(b)<0) iz=
DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
p3=cgetr(4); gaffect(a,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
p4=cgetr(4); gaffect(b,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
/*printf("%s %s %s %s\n",c1,c2,c3,c4);*/
s=OpenScreen(&myscreen1);
myWindow.Screen=s;
w=OpenWindow(&myWindow);
if(w==0 | s==0){printf("can not open window or screen\n");
if(w) CloseWindow(w);
if(s) CloseScreen(s);
avma = av;
killvalue(ep);
return gnil;
}
rp=w->RPort;
SetDrMd(rp,JAM1);
SetAPen(rp,1);
/******Draw the box and axes***/
Move(rp,DECI,DECJ);Draw(rp,DECI,js);
Move(rp,DECI,DECJ);Draw(rp,is,DECJ);
Move(rp,is,DECJ);Draw(rp,is,js);
Move(rp,DECI,js);Draw(rp,is,js);
if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
Move(rp,-25,js); Text(rp,c2,strlen(c2));
Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
Move(rp,DECI,ordonnee[1]);
for (i = 1, h = 0; i <= is2; i++) Draw(rp,++h + DECI, ordonnee[i]);
while(1)
{
WaitPort(w->UserPort);
msg=(struct IntuiMessage *)GetMsg(w->UserPort);
if(msg->Class == CLOSEWINDOW) break;
}
CloseWindow(w);
CloseScreen(s);
avma = av;
killvalue(ep);
return gnil;
}
GEN ploth2(ep,a,b,ch,prec)
entree *ep;
GEN a,b;
char *ch;
long prec;
{
struct IntuiMessage *msg;
struct TextAttr myfont =
{
(STRPTR)"topaz.font", 8 , 0 , 0
};
struct NewScreen myscreen1 =
{
0, 0,
650, 420,
2,
1,2,
HIRES | LACE,
CUSTOMSCREEN,
NULL,/*(struct TextAttr *)&myfont,*/
(UBYTE *)"ploth2",
NULL,
NULL
};
struct NewWindow myWindow =
{
0,
5,
640,410,
-1,
-1,
CLOSEWINDOW | REFRESHWINDOW ,
SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
NULL,
NULL,
(UBYTE *)"PLOTH2",
NULL,
NULL,
10, 10,
640, 400,
CUSTOMSCREEN
};
long av,av2,k,k1,j,j1,i,sig,is,is2,js,js2;
GEN p1,p2,p3,p4,ysml,ybig,xsml,xbig,diffx,diffy,dxj,t,dyj,dt,y[ISCR+1],x[ISCR+1];
short h, iz=0, jz = 0;
char c1[20], c2[20], c3[20], c4[20];
struct Screen *s, *OpenScreen();
struct Window *w, *OpenWindow();
struct RastPort *rp;
GfxBase=OpenLibrary("graphics.library",0);
is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
sig=gcmp(b,a); if(!sig) return gnil;
av=avma;
if(sig<0) {p1=a;a=b;b=p1;}
for(i=1;i<=is2;i++) {x[i]=cgetr(3);y[i]=cgetr(3);}
newvalue(ep,cgetr(prec)); t=(GEN)ep->value;
gaffect(a,t);
dt=gdivgs(gsub(b,a),is2-1);ysml=ybig=xsml=xbig=gzero;
av2=avma;
for(i=1;i<=is2;i++)
{
p1=lisexpr(ch);gaffect((GEN)p1[1],x[i]);gaffect((GEN)p1[2],y[i]);
if(gcmp(y[i],ysml)<0) ysml=y[i];
if(gcmp(y[i],ybig)>0) ybig=y[i];
if(gcmp(x[i],xsml)<0) xsml=x[i];
if(gcmp(x[i],xbig)>0) xbig=x[i];
gaddz(t,dt,t);avma=av2;
}
diffy=gsub(ybig,ysml);
if(gcmp0(diffy)) {ybig=gaddsg(1,ybig);diffy=gun;}
diffx=gsub(xbig,xsml);
if(gcmp0(diffx)) {xbig=gaddsg(1,xbig);diffx=gun;}
dyj=gdivsg(js2-1,diffy);jz=js+itos(ground(gmul(ysml,dyj)));
dxj=gdivsg(is2-1,diffx);iz=DECI-itos(ground(gmul(xsml,dxj)));
if(gsigne(ybig)*gsigne(ysml)<0) jz=
DECJ + itos(ground(gmul(ybig,dyj)));
if(gsigne(xsml)*gsigne(ysml)<0) iz=
DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
/****************
for(i=1;i<=is2;i++)
{
ordonneey[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
ordonneey[i] = DECI+itos(ground(gmul(gsub(x[i], xsml),dxj)));
av2=avma;
}
****************/
p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
p3=cgetr(4); gaffect(xsml,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
p4=cgetr(4); gaffect(xbig,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
/*printf("%s %s %s %s\n",c1,c2,c3,c4);*/
s=OpenScreen(&myscreen1);
myWindow.Screen=s;
w=OpenWindow(&myWindow);
if(w==0){printf("can not open window\n");
CloseScreen(s);
avma = av;
killvalue(ep);
return gnil;
}
rp=w->RPort;
SetDrMd(rp,JAM1);
SetAPen(rp,1);
Move(rp,DECI,DECJ);Draw(rp,DECI,js);
Move(rp,DECI,DECJ);Draw(rp,is,DECJ);
Move(rp,is,DECJ);Draw(rp,is,js);
Move(rp,DECI,js);Draw(rp,is,js);
if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
Move(rp,-25,js); Text(rp,c2,strlen(c2));
Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
/* Move(rp,DECI,ordonnee[1]);*/
for (i = 1, h = 0; i <= is2; i++)
{
k1= DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
j1= DECI+itos(ground(gmul(gsub(x[i], xsml),dxj)));
if(i==1) {Move(rp,j1,k1);}
else
{
Draw(rp,j1, k1);
}
}
while(1)
{
WaitPort(w->UserPort);
msg=(struct IntuiMessage *)GetMsg(w->UserPort);
if(msg->Class == CLOSEWINDOW) break;
}
CloseWindow(w);
CloseScreen(s);
avma = av;
killvalue(ep);
return gnil;
}
_abort()
{
err(interrupter);
}
GEN plothraw(listx,listy)
GEN listx, listy;
{
struct IntuiMessage *msg;
struct TextAttr myfont =
{
(STRPTR)"topaz.font", 8 , 0 , 0
};
struct NewScreen myscreen1 =
{
0, 0,
650, 420,
2,
1,2,
HIRES | LACE,
CUSTOMSCREEN,
NULL,/*(struct TextAttr *)&myfont,*/
(UBYTE *)"plothraw",
NULL,
NULL
};
struct NewWindow myWindow =
{
0,
5,
640,410,
-1,
-1,
CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
NULL,
NULL,
(UBYTE *)"PLOTHRAW",
NULL,
NULL,
10, 10,
640, 400,
CUSTOMSCREEN
};
long av=avma,av2,i,lx,sig,is,is2,js,js2;
SPoint *points;
GEN p1,p2,p3,p4,xsml,xbig,ysml,ybig,dx,dy,scal,scaly;
short h, iz=0, jz = 0, ordonnee[ISCR+1];
char c1[20], c2[20], c3[20], c4[20];
struct Screen *s, *OpenScreen();
struct Window *w, *OpenWindow();
struct RastPort *rp;
GfxBase=OpenLibrary("graphics.library",0);
if(!GfxBase )
{ printf("can not open graphics.library\n");
return(gnil);
}
if((typ(listx)<17)||(typ(listx)>18)||(typ(listy)<17)||(typ(listy)>18))
err(ploter4);
lx=lg(listx);
if(lg(listy)!=lx) err(ploter5);
if(lx==1) return gnil;
points = (SPoint*)malloc(lx*sizeof(SPoint));
if(!points) err(ploter6);
is=ISCR-IDEC-5;js=JSCR-JDEC-10;is2=is+IDEC;js2=js+JDEC;
av=avma;xsml=xbig=(GEN)listx[1];ysml=ybig=(GEN)listy[1];
/************************
is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
***************************/
for(i = 0; i < lx-1; i++)
{
p1=(GEN)listx[i+1];
if(gcmp(p1,xsml)<0) xsml=p1;if(gcmp(p1,xbig)>0) xbig=p1;
p1=(GEN)listy[i+1];
if(gcmp(p1,ysml)<0) ysml=p1;if(gcmp(p1,ybig)>0) ybig=p1;
}
dx=gsub(xbig,xsml);dy=gsub(ybig,ysml);
if(gcmp0(dx))
{
if(gcmp0(dy))
{
scal=gun;dx=gsubsg(is>>1,xsml);
dy=gsubsg(js>>1,ysml);
}
else
{
scal=gdivsg(js,dy);
dx=gneg(gmul(scal,xsml));dy=gneg(gmul(scal,ysml));
}
}
else
{
scal=gdivsg(is,dx);
if(!gcmp0(dy))
{
scaly=gdivsg(js,dy);if(gcmp(scaly,scal)<0) scal=scaly;
}
dx=gneg(gmul(scal,xsml));dy=gneg(gmul(scal,ybig));
}
for(i = 0; i < lx-1; i++)
{
av2=avma;
points[i].x = IDEC + itos(ground(gadd(gmul((GEN)listx[i+1],scal),dx)));
points[i].y = JDEC - itos(ground(gadd(gmul((GEN)listy[i+1],scal),dy)));
avma=av2;
}
/********************
for(i=1;i<=is2;i++) y[i]=cgetr(3);
newvalue(ep,cgetr(3)); x=(GEN)ep->value;
gaffect(a,x);
dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
av2=avma;
*****************************/
/*******************
for(i=1;i<=is2;i++)
{
gaffect(lisexpr(ch),y[i]);
if(gcmp(y[i],ysml)<0) ysml=y[i];
if(gcmp(y[i],ybig)>0) ybig=y[i];
gaddz(x,dx,x);avma=av2;
}
diff=gsub(ybig,ysml);
if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
dyj=gdivsg(js2-1,diff);av2=avma;
for(i = 1; i <= is2; i++)
{
ordonnee[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
avma=av2;
}
if(gsigne(ybig)*gsigne(ysml)<0) jz=
DECJ + itos(ground(gmul(ybig,dyj)));
if(gsigne(a)*gsigne(b)<0) iz=
DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
p3=cgetr(4); gaffect(a,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
p4=cgetr(4); gaffect(b,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
*************************************/
s=OpenScreen(&myscreen1);
myWindow.Screen=s;
w=OpenWindow(&myWindow);
if(w==0 | s==0){printf("can not open window or screen\n");
if(w) CloseWindow(w);
if(s) CloseScreen(s);
avma = av;
free(points);
return gnil;
}
rp=w->RPort;
SetDrMd(rp,JAM1);
SetAPen(rp,1);
/******Draw the box and axes***/
Move(rp,IDEC,JDEC);Draw(rp,IDEC,js2);
Move(rp,IDEC,JDEC);Draw(rp,is2,JDEC);
Move(rp,is2,JDEC);Draw(rp,is2,js2);
Move(rp,IDEC,js2);Draw(rp,is2,js2);
/*************************
if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
Move(rp,-25,js); Text(rp,c2,strlen(c2));
Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
Move(rp,DECI,ordonnee[1]);
for (i = 1, h = 0; i <= is2; i++) Draw(rp,++h + DECI, ordonnee[i]);
********************************/
for(i = 0; i < lx-1;i++)
WritePixel(rp,points[i].x,points[i].y);
/* PolyDraw(rp,lx,points);*/
while(1)
{
WaitPort(w->UserPort);
msg=(struct IntuiMessage *)GetMsg(w->UserPort);
if(msg->Class == CLOSEWINDOW) break;
}
CloseWindow(w);
CloseScreen(s);
free(points);avma = av;
return gnil;
}
GEN rectdraw(list)
GEN list;
{
struct IntuiMessage *msg;
struct TextAttr myfont =
{
(STRPTR)"topaz.font", 8 , 0 , 0
};
struct NewScreen myscreen1 =
{
0, 0,
650, 420,
2,
1,2,
HIRES | LACE,
CUSTOMSCREEN,
NULL,/*(struct TextAttr *)&myfont,*/
(UBYTE *)"draw",
NULL,
NULL
};
struct NewWindow myWindow =
{
0,
5,
640,410,
-1,
-1,
CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG | GIMMEZEROZERO,
NULL,
NULL,
(UBYTE *)"DRAW",
NULL,
NULL,
10, 10,
640, 400,
CUSTOMSCREEN
};
long *e,*p1,*ptx,*pty,*numpoints,*numtexts,*xtexts,*ytexts;
long n,i,j,x0,y0,av=avma;
long a,b,c,d,nd[10],ne;
char **texts;
SPoint *points, **lines, *SLine;
SSegment *segments;
SRectangle *rectangles, SRec;
struct Screen *s, *OpenScreen();
struct Window *w, *OpenWindow();
struct RastPort *rp;
GfxBase=OpenLibrary("graphics.library",0);
if(!GfxBase )
{ printf("can not open graphics.library\n");
return(gnil);
}
if(typ(list)!=17) err(rploter3);
n=lg(list)-1;if(n%3) err(rploter4);
n=n/3;if(!n) return gnil;
nd[0]=nd[1]=nd[2]=nd[3]=nd[4]=nd[5]=nd[6]=0;
for(i=0;i<n;i++)
{
if(typ((GEN)list[3*i+1])!=1) err(rploter5);
ne=itos((GEN)list[3*i+1]);if((ne<0)||(ne>15)) err(rploter2);
e=rectgraph[ne];
p1=(long*)e[0];while((long)p1)
{
if(p1[1]!=4) nd[p1[1]]++;
else nd[1]+=p1[2];
p1=(long*)p1[0];
}
}
points=(SPoint*)malloc(nd[1]*sizeof(SPoint));
segments=(SSegment*)malloc(nd[2]*sizeof(SSegment));
rectangles=(SRectangle*)malloc(nd[3]*sizeof(SRectangle));
lines=(SPoint**)malloc(nd[5]*sizeof(SPoint*));
numpoints=(long*)malloc(nd[5]*sizeof(long));
texts=(char**)malloc(nd[6]*sizeof(char*));
numtexts=(long*)malloc(nd[6]*sizeof(long));
xtexts=(long*)malloc(nd[6]*sizeof(long));
ytexts=(long*)malloc(nd[6]*sizeof(long));
nd[1]=nd[2]=nd[3]=nd[5]=nd[6]=0;
for(i=0;i<n;i++)
{
e=rectgraph[itos((GEN) list[3*i+1])];x0=list[3*i+2];y0=list[3*i+3];
if((typ((GEN)x0)!=1)||(typ((GEN)y0)!=1)) err(rploter5);
x0=itos((GEN)x0);y0=itos((GEN)y0);
p1=(long*)e[0];
while((long)p1)
{
switch(p1[1])
{
case 1:
points[nd[1]].x=p1[2]+x0;
points[nd[1]].y=p1[3]+y0;
nd[1]++;break;
case 2:
segments[nd[2]].x1=p1[2]+x0;
segments[nd[2]].y1=p1[3]+y0;
segments[nd[2]].x2=p1[4]+x0;
segments[nd[2]].y2=p1[5]+y0;
nd[2]++;break;
case 3:
a=rectangles[nd[3]].x=p1[2]+x0;
b=rectangles[nd[3]].y=p1[3]+y0;
rectangles[nd[3]].width=p1[4]+x0-a;
rectangles[nd[3]].height=p1[5]+y0-b;
nd[3]++;break;
case 4:
ptx=(long*)p1[3];pty=(long*)p1[4];
for(j=0;j<p1[2];j++)
{
points[nd[1]+j].x=ptx[j]+x0;
points[nd[1]+j].y=pty[j]+y0;
}
nd[1]+=p1[2];break;
case 5:
ptx=(long*)p1[3];pty=(long*)p1[4];
numpoints[nd[5]]=p1[2];
lines[nd[5]]=(SPoint*)malloc(p1[2]*sizeof(SPoint));
for(j=0;j<p1[2];j++)
{
lines[nd[5]][j].x=ptx[j]+x0;
lines[nd[5]][j].y=pty[j]+y0;
}
nd[5]++;break;
case 6:
texts[nd[6]]=(char*)p1[3];numtexts[nd[6]]=p1[2];
xtexts[nd[6]]=p1[4]+x0;ytexts[nd[6]]=p1[5]+y0;
nd[6]++;break;
default: break;
}
p1=(long*)p1[0];
}
}
s=OpenScreen(&myscreen1);
myWindow.Screen=s;
w=OpenWindow(&myWindow);
if(w==0 | s==0){printf("can not open window or screen\n");
if(w) CloseWindow(w);
if(s) CloseScreen(s);
avma = av;
free(points);free(segments);free(rectangles);
free(numpoints);for(i=0;i<nd[5];i++) free(lines[i]);
free(lines);free(texts);free(numtexts);free(xtexts);free(ytexts);
return gnil;
}
rp=w->RPort;
SetDrMd(rp,JAM1);
SetAPen(rp,1);
for(i=0;i<nd[1];i++) WritePixel(rp,points[i].x,points[i].y);
for(i=0;i<nd[2];i++) {Move(rp,segments[i].x1,segments[i].y1);
Draw(rp,segments[i].x2,segments[i].y2);}
for(i=0;i<nd[3];i++)
{
SRec=rectangles[i];a=SRec.x;b=SRec.y;c=a+SRec.width;
d=b+SRec.height;
/*printf("%d %d %d %d\n",a,b,c,d); */
Move(rp,a,b);
Draw(rp,c,b);Draw(rp,c,d);Draw(rp,a,d);Draw(rp,a,b);
}
for(i=0;i<nd[5];i++)
{
SLine=lines[i];
Move(rp,SLine[0].x,SLine[0].y);
for(j=1;j<numpoints[i];j++)
Draw(rp,SLine[j].x,SLine[j].y);
}
for(i=0;i<nd[6];i++)
{ Move(rp,xtexts[i],ytexts[i]);
Text(rp,texts[i],strlen(texts[i]));
}
while(1)
{
WaitPort(w->UserPort);
msg=(struct IntuiMessage *)GetMsg(w->UserPort);
if(msg->Class == CLOSEWINDOW) break;
}
CloseWindow(w);
CloseScreen(s);
free(points);free(segments);free(rectangles);
free(numpoints);for(i=0;i<nd[5];i++) free(lines[i]);
free(lines);free(texts);free(numtexts);free(xtexts);free(ytexts);
avma = av;return gnil;
}